package practicapoo.source;

import java.io.Serializable;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Objects;

public class Multa implements Serializable, Comparable {

    private boolean tipoMulta;// false tipo vmedia, true tipo vinstantanea
    private double importe;
    private boolean pagada;
    private GregorianCalendar fechahora;
    private GregorianCalendar fentrada;
    private GregorianCalendar fsalida;
    private double velocidad;
    private Vehiculo vehiculo;
    private long comparante;
    // construcctor multa velocidad instantanea



    public Multa(double velocidad, GregorianCalendar fechahora, Vehiculo vehiculo) {
        this.tipoMulta = true;
        // importe constructor
        if ((velocidad > 120) && (velocidad <= 130)) {
            this.importe = 100;
        } else if ((velocidad > 130) && (velocidad <= 140)) {
            this.importe = 150;
        } else if ((velocidad > 140) && (velocidad <= 150)) {
            this.importe = 230;
        } else if (velocidad > 150) {
            this.importe = 350;
        }
        this.pagada = false;
        this.fechahora = fechahora;
        this.velocidad = velocidad;
        this.vehiculo = vehiculo;
        this.comparante = fechahora.getTimeInMillis();

    }

    public Multa(GregorianCalendar entrada, GregorianCalendar salida,
            double velocidad, Vehiculo vehiculo) {
        this.tipoMulta = false;
        if ((velocidad > 120) && (velocidad <= 130)) {
            this.importe = 150;
        } else if ((velocidad > 130) && (velocidad <= 140)) {
            this.importe = 300;
        } else if ((velocidad > 140) && (velocidad <= 150)) {
            this.importe = 700;
        } else if (velocidad > 150) {
            this.importe = 1500;
        }
        this.pagada = false;
        this.fentrada = entrada;
        this.fsalida = salida;
        this.velocidad = velocidad;
        this.vehiculo = vehiculo;
        this.fechahora = salida;
        this.comparante = salida.getTimeInMillis();
    }

    @Override
    public String toString() {
        String spagada;
        if (pagada == true) {
            spagada = "Si";
        } else {
            spagada = "No";
        }

        if (this.tipoMulta == true) {
            return (" Multa por radar movil \n"
                    + " Velocidad: " + Double.toString(this.velocidad) + "\n"
                    + " Pagada: " + spagada + "\n"
                    + " Vehiculo: " + this.vehiculo.getMatricula() + "\n"
                    + " Fecha y hora: " + fechahora.getTime())+"\n"
                    + " Importe: "+this.importe;
        } else if (this.tipoMulta == false) {
            return (" Multa por velocidad media \n"
                    + " Velocidad: " +  Double.toString(this.velocidad)  + "\n"
                    + " Pagada: " + spagada + "\n"
                    + " Vehiculo: " + this.vehiculo.getMatricula() + "\n"
                    + " Fecha y hora entrada: " + fentrada.getTime() + "\n"
                    + " Fecha y hora salida: " + fsalida.getTime())+"\n"
                    + " Importe: "+this.importe;
        }
        return null;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Multa other = (Multa) obj;
        if (!Objects.equals(this.vehiculo, other.vehiculo)) {
            return false;
        }
        return true;
    }

    public void setVelocidad(double velocidad) {
        this.velocidad = velocidad;
    }

    public void setVehiculo(Vehiculo vehiculo) {
        this.vehiculo = vehiculo;
    }

    public Vehiculo getVehiculo() {
        return vehiculo;
    }

    public boolean isTipoMulta() {
        return tipoMulta;
    }

    public double getImporte() {
        return importe;
    }

    public boolean isPagada() {
        return pagada;
    }

    public GregorianCalendar getFechahora() {
        return fechahora;
    }

    public GregorianCalendar getFentrada() {
        return fentrada;
    }

    public GregorianCalendar getFsalida() {
        return fsalida;
    }

    public double getVelocidad() {
        return velocidad;
    }

    public void setTipoMulta(boolean tipoMulta) {
        this.tipoMulta = tipoMulta;
    }

    public void setImporte(double importe) {
        this.importe = importe;
    }

    public void setPagada(boolean pagada) {
        this.pagada = pagada;
    }

    public void setFechahora(GregorianCalendar fechahora) {
        this.fechahora = fechahora;
    }

    public void setFentrada(GregorianCalendar fentrada) {
        this.fentrada = fentrada;
    }

    public void setFsalida(GregorianCalendar fsalida) {
        this.fsalida = fsalida;
    }

    public long getComparante() {
        return comparante;
    }

    public void setComparante(long comparante) {
        this.comparante = comparante;
    }

    

    @Override
    public int compareTo(Object o) {
        Multa otra = (Multa) o;
        if (comparante<otra.comparante)
            return 1;
        else if (comparante>otra.comparante) 
            return -1;
        return 0;
    }





}